//*************************************************************************************
// File:     XGDESKEvent.cs
//*************************************************************************************
// Description: Clase sealed que encapsula un evento de la simulacion.
//*************************************************************************************
// Classes:      XGDESKEvent
//*************************************************************************************
// Author:      ManOguaR
//*************************************************************************************

using Xeralabs.Core.Events.Handling;

namespace Xeralabs.Core.Events
{
    /// <summary>
    /// Clase que encasula un evento GDESK.
    /// </summary>
    public sealed class XGDESKEvent
    {
        private ulong _sender;
        private ulong _reciver;
        private double _timeMark;
        private iXGDESKEventArgs _arguments;
        private bool _handled;

        /// <summary>
        /// Identificador unico de 64 bits del emisor del evento.
        /// </summary>
        public ulong Sender { get { return _sender; } }
        /// <summary>
        /// Identificador unico de 64 bits del receptor del evento.
        /// </summary>
        public ulong Reciver { get { return _reciver; } }
        /// <summary>
        /// Marca de tiempo basada en el temporizador Xeralabs.GDESK.publics.GlobalTimer
        /// </summary>
        public double TimeMark { get { return _timeMark; } }
        /// <summary>
        /// Objeto que implementa la interfaz Xeralabs.GDESK.Events.Handling.iXGDESKEventArgs y representa los argumentos del evento de la simulacion.
        /// </summary>
        public iXGDESKEventArgs Arguments { get { return _arguments; } }
        /// <summary>
        /// Devuelve o establece si se ha manejado el evento.
        /// </summary>
        public bool Handled { get { return _handled; } set { _handled = value; } }
        /// <summary>
        /// Rellena el evento con los datos para su proceso.
        /// </summary>
        /// <param name="senderGUID">El identificador unico de 64 bits relacionado con el emisor del evento.</param>
        /// <param name="reciverGUID">El identificador unico de 64 bits relacionado con el receptor del evento.</param>
        /// <param name="timeMark">Valor de coma flotante de 64 bits que representa una marca de tiempo basada en el temporizador Xeralabs.GDESK.publics.GlobalTimer.</param>
        /// <param name="evtArgs">Instancia de clase que implementa la interfaz Xeralabs.GDESK.Events.Handling.iXGDESKEventArgs y representa los argumentos del evento de la simulacion.</param>
        public void Fill(ulong senderGUID, ulong reciverGUID, double timeMark, iXGDESKEventArgs evtArgs)
        {
            _sender = senderGUID;
            _reciver = reciverGUID;
            _timeMark = timeMark;
            _arguments = evtArgs;
        }

        /// <summary>
        /// Metodo para desechar el evento.
        /// </summary>
        public void Dump()
        {
            _sender = 0;
            _reciver = 0;
            _timeMark = 0.0;
            _arguments = default(iXGDESKEventArgs);
        }
    }
}